package com.jikangjun.disk.file.repository;

import com.jikangjun.disk.file.entity.FileEntity;
import com.jikangjun.disk.file.entity.FileShareEntity;
import com.jikangjun.disk.file.entity.SearchFileEntity;
import com.jikangjun.disk.mybatis.entity.PtFileEntity;
import com.jikangjun.disk.mybatis.flexigrid.PagingEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

import org.springframework.stereotype.Component;

@Mapper
@Component("repositoryFileDao") // 添加此注解以指定唯一的Bean名称
public interface FileDao {
    /**
     * 删除文件表所有内容
     */
    void deleteFileAll();

    /**
     * 保存文件信息
     * @param ptFileEntityList
     */
    void saveFileInfo(@Param("list") List<PtFileEntity> ptFileEntityList);

    // 查询用户个人文件列表
    List<FileEntity> queryUserFiles(@Param("userId") String userId,
                                    @Param("parentId") String parentId);

    // 查询共享给用户的文件列表
    List<FileShareEntity> querySharedFiles(@Param("userId") String userId);

    // 根据文件ID查询文件详情
    FileEntity queryFileById(@Param("fileId") String fileId);

    // 创建文件夹
    void createFolder(FileEntity folder);

    /**
     * 文件列表总数量
     * @param entity
     * @return
     */
    Integer queryFileListTotal(@Param("entity") SearchFileEntity entity);

    /**
     * 文件列表分页查询
     * @param entity
     * @param paging
     * @return
     */
    List<PtFileEntity> queryFileInfoListByPage(@Param("entity") SearchFileEntity entity, @Param("paging") PagingEntity paging);

    void updateFile(FileEntity file);
    
    /**
     * 更新文件名
     * @param fileId 文件ID
     * @param fileName 新文件名
     */
    void updateFileName(@Param("fileId") String fileId, @Param("fileName") String fileName);

    /**
     * 查询所以文件列表
     * @return
     */
    List<PtFileEntity> queryFileListAll();

    /**
     * 检查文件是否存在
     * @param fileName 文件名
     * @param parentId 父目录ID
     * @return 是否存在
     */
    boolean checkFileExists(@Param("fileName") String fileName, @Param("parentId") String parentId);

    /**
     * 插入文件记录
     * @param file 文件实体
     */
    void insertFile(FileEntity file);

    /**
     * 删除文件记录
     * @param fileId 文件ID
     */
    void deleteFile(@Param("fileId") String fileId);

    /**
     * 查询文件信息
     * @param fileUuid
     * @return
     */
    PtFileEntity queryFileInfoById(@Param("fileUuid") String fileUuid);
}